// Copyright (c) 2025 Shenzhen Kaihong Digital Industry Development Co., Ltd.
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

pub mod build_dep_graph;
pub mod stat_dep_graph;
mod pkg_config_resolver;
mod pkg_stat_resolver;

use std::fmt::Display;

pub use pkg_config_resolver::PkgConfigResolver;
pub use pkg_stat_resolver::PkgStatResolver;
use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[repr(u8)]
#[serde(rename_all = "snake_case")]
pub enum DepKind {
    Build,
    HostBuild,
    Runtime,
}

impl Display for DepKind {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        write!(f, "{}", self.as_str())
    }
}

impl DepKind {
    pub fn as_str(&self) -> &'static str {
        match self {
            DepKind::Build => "build",
            DepKind::HostBuild => "host_build",
            DepKind::Runtime => "runtime",
        }
    }
}
